<?
class usuarios{

	// Propiedades

	var $id;
	var $nombre; 
	var $login;
	var $id_zona;
	var $zona;

	var $total;

	function get($conn, $id){
		$q = "SELECT A.*, B.nombre AS zona FROM usuarios AS A INNER JOIN zonas AS B ON A.id_zona = B.id  ";
		$q.= "WHERE A.id='$id'";
		//die($q);
		$r = $conn->Execute(utf8_encode($q));
		if(!$r->EOF){
			$this->id = $r->fields['id'];
			$this->nombre = $r->fields['nombre'];
			$this->login = $r->fields['login'];
			$this->id_zona = $r->fields['id_zona'];
			$this->zona = $r->fields['zona'];

			return true;
		}else
			return false;
	}

	function get_all($conn, $from=0, $max=0,$orden="id", $id_zona){
		$q = "SELECT id FROM usuarios WHERE id_zona=$id_zona OR id_zona IN (SELECT id FROM zonas WHERE id_padre = $id_zona)";
		$q.= "ORDER BY $orden ";
		//die($q);
		$r = ($max!=0) ? $conn->SelectLimit($q, $max, $from) : $conn->Execute(utf8_encode($q));
		$collection=array();
		while(!$r->EOF){
			$ue = new usuarios;
			$ue->get($conn, $r->fields['id']);
			$coleccion[] = $ue;
			$r->movenext();
		}
		$this->total = $r->RecordCount();
		return $coleccion;
	}

	function add($conn, 
							$nombre, 
							$login,
							$password,
							$id_zona){
		try{
		$passMD5 = md5($password);
		$q = "INSERT INTO usuarios ";
		$q.= "(nombre, login, password, id_zona) ";
		$q.= "VALUES ";
		$q.= "(upper('$nombre'), '$login', '$passMD5', $id_zona) ";
		//die($q);
		$conn->Execute(utf8_encode($q));
		
		$this->auditoria($conn, $q);
		
		return REG_ADD_OK;
		}
		catch( ADODB_Exception $e ){
			if($e->getCode()==-1)
				return ERROR_CATCH_VFK;
			elseif($e->getCode()==-5)
				return ERROR_CATCH_VUK;
			else
				return ERROR_CATCH_GENERICO;
		}
	}

	function set($conn, 
							$id, 
							$nombre, 
							$login,
							$password,
							$id_zona){
		try{
		$q = "UPDATE usuarios SET nombre = upper('$nombre'), login = '$login', id_zona = $id_zona ";
		$q.= "WHERE id='$id' ";
		//die($q);
		$conn->Execute(utf8_encode($q));
		
		$this->auditoria($conn, $q);
		
		if(!empty($password)){
				$this->set_password($conn, $id, $password);
		}
		return REG_SET_OK;
		}
		catch( ADODB_Exception $e ){
			if($e->getCode()==-1)
				return ERROR_CATCH_VFK;
			elseif($e->getCode()==-5)
				return ERROR_CATCH_VUK;
			else
				return ERROR_CATCH_GENERICO;
		}
	}

	function set_password($conn, $id_usuario, $password) {
		if(!empty($password))
			$passMD5 = md5($password);
		else{
			$password = $this->genera_password();
			$passMD5 = md5($password);
		}
		$q = "UPDATE usuarios SET password = '$passMD5' WHERE id = $id_usuario";
//		die($q);
		if($conn->Execute($q)) {
			$this->auditoria($conn, $q);
			return PASS_CHANGE_OK;
		 } else {
			return PASS_CHANGE_FAIL;
		}
	}

	function genera_password(){
		return  "at".mt_rand(0,10000);
	}

	function del($conn, $id){
		try {
			$q = "DELETE FROM usuarios WHERE id='$id'";
			$conn->Execute(utf8_encode($q));
			$this->auditoria($conn, $q);
			return(REG_DEL_OK);
		}
		catch( ADODB_Exception $e ){
			if($e->getCode()==-1)
				return ERROR_CATCH_VFK;
			elseif($e->getCode()==-5)
				return ERROR_CATCH_VUK;
			else
				return ERROR_CATCH_GENERICO;
		}
	}
	
	//CHECK IF THE USER HAS BEEN LOGGED
	function is_logged($conn) {
	//revisa si el usuario ya esta logeado
		if (count($_SESSION)==0) {
			return false;
		}else{
			$this->get_user_by_session($conn);
			return true;
		}
	}

	function get_user_by_session($conn) {
		$id=$_SESSION['id']; // obtengo la id de la sesion
		$this->get($conn, $id); // llamo al metodo get para obtener la inforacion del usuario
	}

	//funcion que hace el proceso de loggeo
	function access_login($conn, $login, $password, $id_zona){
		$passmd5 = md5($password);
		$q="SELECT A.id, A.login, A.password, B.id AS id_zona FROM usuarios AS A INNER JOIN zonas AS B ON A.id_zona = B.id WHERE A.login='$login' AND B.codigo = '$id_zona'";
		$r=$conn->Execute(utf8_encode($q));
		if(!$r->EOF){
			if ($r->fields['password']==$passmd5) {
				session_start();
				$_SESSION['SesionZona']=$r->fields['id_zona'];
				$_SESSION['login'] = $r->fields['login'];	// lleno la variable de sesion
				$_SESSION['id'] = $r->fields['id'];

				//Activa Peritos Suspendidos De Acuerdo a Su fecha de Reactivacion
				$q="UPDATE peritos SET estatus='A' WHERE estatus='S' AND fecha_reintegro <= current_date;";
				//die($q);
				$conn->Execute(utf8_encode($q));
				
				//Suspende Peritos Por Falta De Pago. Descomentar Para Activar Funcion
				$q="SELECT * FROM suspende_peritos();";
				//die($q);
				//$conn->Execute(utf8_encode($q));
				

				return true;
			}else{
				return false;
			}
		}else{
			return false;
		}
	}
	
	function obtiene_permisos($conn, $id_usuario){
	//Devuelve una matriz con los permisos para el usuario
		$q = "SELECT operaciones.descripcion, operaciones.pagina ";
		$q.= "FROM relacion_us_op ";
		$q.= "INNER JOIN operaciones ON (operaciones.id = relacion_us_op.id_operacion) ";
		$q.= "INNER JOIN usuarios ON (usuarios.id = relacion_us_op.id_usuario) ";
		$q.= "WHERE usuarios.id = '$id_usuario' ";
		//die($q);
		$r = $conn->Execute(utf8_encode($q));
		$i = 0;
		while(!$r->EOF){
			$aPermiso[$i]['descripcion'] = $r->fields['descripcion'];
			$aPermiso[$i]['pagina'] = $r->fields['pagina'];
			$r->movenext();
			$i++;
		}
		return $aPermiso;
	}
	
	function chequea_permiso($conn, $id_usuario, $pagina){
	//Devuelve una matriz con los permisos para el usuario
		$q = "SELECT 'X' ";
		$q.= "FROM relacion_us_op ";
		$q.= "INNER JOIN operaciones ON (operaciones.id = relacion_us_op.id_operacion) ";
		$q.= "INNER JOIN usuarios ON (usuarios.id = relacion_us_op.id_usuario) ";
		$q.= "WHERE usuarios.id = '$id_usuario' ";
		$q.= "AND operaciones.pagina = '$pagina' ";
		//die($q);
		$r = $conn->Execute(utf8_encode($q));
		if(!$r->EOF)
			return true;
		else
			return false;
	}
	//CEPV.100706.SN VALIDANDO LA EMPRESA EN CASO QUE EL SISTEMA SEA MULTIEMPRESA
	function validar_empresa($conn, $Usuario,$Empresa){
		$q="SELECT * FROM puser.emp_usu WHERE emp_cod=$Empresa and usu_cod=$Usuario";
		//die($q);
		$r=$conn->Execute(utf8_encode($q));
		if(!$r->EOF){
			session_start();
			$_SESSION['EmpresaL']=$Empresa;
			$oempresa = new empresa;
			$oempresa->get($conn, $Empresa);
			$_SESSION['Empresa']=$oempresa->emp_nom;
			return true;
		}else
			return false;
	}
	//CEPV.100706.EN
	
	function auditoria($conn, $query) {
		$id_usuario = $_SESSION['id'];
		$q = "INSERT INTO auditoria(id_usuario, query) VALUES($id_usuario,$$" . $query . "$$);";
		//die($q);
		$conn->Execute(utf8_encode($q));

		return true;
	}
	
}
?>
